package com.yyxk.thousandtime.util;

import android.os.Handler;

import java.util.Timer;
import java.util.TimerTask;

import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
 * ----------Dragon be here!----------/
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃神兽保佑
 * 　　　　┃　　　┃代码无BUG！
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━神兽出没━━━━━━
 * 项目名称：WheelMedical
 * 包名:com.yyxk.wheelmedical.util
 * 类描述：新版计时器，利用RxJava
 * 创建人：Random
 * 创建时间：16:35
 * 修改人：Random
 * 修改时间：16:35
 * 修改备注：
 */
public abstract class TimeTick {
    public boolean cancle=false;

    public abstract OnNext setNext();

    public void after(final int time){
        Subscriber<Integer> subscriber=new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                setNext().onNextMove();
            }
        };
        Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                try {
                    Thread.sleep(time);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                subscriber.onNext(time);
            }
        }).subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(subscriber);

    }

    public interface OnNext{
        public abstract void onNextMove();
    }
    private Handler mHandler=new Handler();
    private Timer timer;
    public void replay(final long time){
        cancle=false;
        timer=new Timer();
        TimerTask timerTask=new TimerTask() {
            @Override
            public void run() {
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                       setNext().onNextMove();
                    }
                });
            }
        };
        timer.schedule(timerTask,0,time);

    }

    public void cancle(){
        if(timer!=null) {
            timer.cancel();
            cancle = true;
        }
    }
}
